package Servicios;

import DAO.DAOCuentas;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class GestorDeInicioDeSesion extends HttpServlet {

    public GestorDeInicioDeSesion() {
    }
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException{
        response.setContentType("text/html;charset=UTF-8");
        iniciarSesion(request, response);
    }

    private void iniciarSesion(HttpServletRequest request, HttpServletResponse response) {
        try {
            String nombreUsuario = request.getParameter("nombreNAME");
            String pass = request.getParameter("passNAME");
            HttpSession sessionOk = request.getSession();
            String privilegio = "";

            if (existeCuenta(nombreUsuario,pass)) {
                try {
                    sessionOk.setAttribute("nombreUsuario", nombreUsuario);
                    //sessionOk.setMaxInactiveInterval(300);
                    DAOCuentas cuenta = new DAOCuentas();
                    ResultSet registroCuenta = cuenta.buscarCuenta(nombreUsuario);

                    while (registroCuenta.next()) {
                        privilegio = registroCuenta.getObject(3).toString();
                        sessionOk.setAttribute("privilegio", privilegio);
                    }                    
                    if (privilegio.equals("1")) {
                        cuenta.cerrarConexionACuentas();
                        response.sendRedirect("PortalAdministrador.jsp");
                    }
                    if (privilegio.equals("2")) {
                        cuenta.cerrarConexionACuentas();
                        response.sendRedirect("PortalAlumno.jsp");
                    }
                } catch (IOException ex) {
                    System.out.println("Error al dar html de salida del servicio GestorDeInicioDeSesion");
                } catch (SQLException ex) {
                    System.out.println("Error al ingresar a la base de datos de la aplicacion");
                }

            } else {
                
                PrintWriter out = null;
                try {
                     out = response.getWriter();
                    /* TODO output your page here. You may use following sample code. */
                    out.println("<html>");
                    out.println("<head>");
                    out.println("<title>Error de sesion</title>");
                    out.println("</head>");
                    out.println("<body>");
                    out.println("<h1>Nombre de usuario/contraseña incorrectos para " + nombreUsuario + "</h1>");
                    out.println("<a href=\"Login.jsp\">Regresar</a>");
                    out.println("</body>");
                    out.println("</html>");

                } catch (IOException ex) {
                    System.out.println("Error al escribir codigo html del servicio GestorDeInicioDeSesion");
                }
            }
        } catch (SQLException ex) {
            System.out.println("Error al buscar en la base de datos de cuentas (no se obtuvo la contraseña)");
        }
    }

    private boolean existeCuenta(String nombreUser, String pass) throws SQLException {
            int contador = 0;
            String passEncontrada = null;
            DAOCuentas cuenta = new DAOCuentas();
            ResultSet registros = cuenta.buscarCuenta(nombreUser);
            while (registros.next()) {
                passEncontrada = registros.getObject(2).toString();
                contador++;
            }
            if (contador == 0) {
                return false;
            } else {
                
                if (pass.equals(passEncontrada)) {
                    return true;
                }else{return false;}
            }
        
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
       
                processRequest(request, response);
       
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
       
                processRequest(request, response);
      
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
